package com.cskaoyan.udp.edition1;

import java.io.IOException;
import java.net.*;

/*
     数据发送方


            实现基于UDP协议的发送端代码
            1.建立udp的socket对象
              DatagramSocket： 此类表示用来发送和接收数据报包的套接字。

              // 套接字: ip + port
              DatagramSocket(int port)
                 创建数据报套接字并将其绑定到本地主机上的指定端口。
            2.将要发送的数据封装成数据包

            DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
            构造数据报包，用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。
            length 参数必须小于等于 buf.length。

            参数：
            buf - 包数据。
            offset - 包数据偏移量。
            length - 包数据长度。
            address - 目的地址。
            port - 目的端口号。

            3.通过udp的socket对象,将数据包发送出

            public void send(DatagramPacket p)
            1）从此套接字发送数据报包。
            2）DatagramPacket 包含的信息指示：将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。


            4. 释放资源

             udp是一种无连接的不可靠的协议：
                不关心数据有没有发送成功，只关心将数据发出去就可以了,类似于发短信

 */
public class Sender {

    public static void main(String[] args) throws IOException {

         //应用层
         String data = "hello, udp";
        //-----------------------------------------------------------------------------

        // 传输层
        // 1. 创建udp协议的套接字对象
        DatagramSocket datagramSocket = new DatagramSocket(10086);

        //2. 创建数据报包，并封装待发送的数据
        byte[] bytes = data.getBytes();
        InetAddress targetIp = InetAddress.getByName("127.0.0.1");
        int port = 10087;
        DatagramPacket sendPacket = new DatagramPacket(bytes, 0, bytes.length, targetIp, port);


        // 发送数据报包
        datagramSocket.send(sendPacket);

        // 释放资源
        datagramSocket.close();

    }
}
